home *** CD-ROM | disk | FTP | other *** search
/ TPUG - Toronto PET Users Group / TPUG Users Group CD / TPUG Users Group CD.iso / COMAL / Z-Misc Series / (k)zi.d64 / txt.pitfall < prev    next >
Text File  |  2007-03-01  |  4KB  |  211 lines

  1. ┴ ╨ITFALL ╞OR ╨ROGRAMMERS
  2.  
  3. BY ─ICK ╦LINGENS AND ╩OE ╓ISSER
  4. ─UTCH ├╧═┴╠ ╒SERS ╟ROUP
  5.  
  6.  
  7. 1. ╔NTRO
  8.  
  9. ╘HE TITLE OF THIS ARTICLE SOUNDS
  10. SOMEWHAT NEGATIVE, BUT THAT IS NOT
  11. ENTIRELY WRONG. ┬Y ITS COMPLEXITY
  12. ├╧═┴╠ OFFERS THE PROGRAMMER SOME
  13. TIMES STRANGE EFFECTS.
  14.  
  15. 2. ╥┼╞ PARAMETERS
  16.  
  17. ═ANY HIGH LEVEL PROGRAMMING LANGUAGES
  18. SUPPORT PARAMETER TRANFER INTO
  19. PROCEDURES IN ONE WAY OR ANOTHER. ╙O
  20. DOES ├╧═┴╠. ╠IKE IN ╨ASCAL THERE ARE
  21. TWO PARAMETER TYPES, VALUE PARAMETERS
  22. AND REFERENCED PARAMETERS.
  23.  
  24.  
  25. ╠OOK AT THE FOLLOWING PROCEDURE
  26. HEADING
  27.  
  28.    ╨╥╧├ ONE(X, ╥┼╞ Y) ├╠╧╙┼─
  29.  
  30. ╘HIS PROCEDURE HAS PARAMETERS OF EACH
  31. TYPE: 
  32.  
  33.    X IS A VALUE PARAMETER
  34.    Y IS A REFERENCED PARAMETER.
  35.  
  36. ╘HE DIFFERENCE BETWEEN THESE TYPES
  37. IS, THAT AFTER A CALL OF THE
  38. PROCEDURE ╧╬┼ A ╓┴╠╒┼ IS TRANSFERRED
  39. TO ╪ AND A ╓┴╥╔┴┬╠┼ TO ┘ (INCLUDING
  40. THE VARIABLE'S VALUE). ╘HE VARIABLES
  41. ╪ AND ┘ BOTH DIES IMMEDIATELY AFTER
  42. LEAVING THE (├╠╧╙┼─) PROCEDURE, BUT
  43. BEFORE THAT, ┘ RETURNS ITS VALUE TO
  44. THE ACTUAL PARAMETER IN THE PROCEDURE
  45. CALL.
  46.  
  47. ╙O THE CALL
  48.  
  49.    ┼╪┼├ ONE(4,7)
  50.  
  51. IS ILLEGAL, BECAUSE THE SECOND
  52. PARAMETER, 7, IS NOT A VARIABLE.
  53.  
  54. ╚OWEVER, AFTER THE CALL
  55.  
  56.    ┼╪┼├ ONE(4,HI)
  57.  
  58. THE VARIABLE ╚╔ HAS THE SAME VALUE AS
  59. ┘ JUST BEFORE ┘ STOPPED TO EXIST.
  60.  
  61.  
  62. 3. ╔NSIDE ├╧═┴╠
  63.  
  64. ├╧═┴╠ SEES ITS VARIABLES CONSISTING
  65. OF THREE PARTS:
  66.  
  67.   1. ITS NAME
  68.   2. A POINTER TO ITS VALUE
  69.   3. ITS VALUE
  70.  
  71. ╘HE POINTER PART POINTS AT THE VALUE,
  72. LIKE THIS:
  73.  
  74.   +1------+2--+   +3------+
  75.   !   HI  ! O---->!   25  !
  76.   +-------+---+   +-------+
  77.  
  78. SAYING THAT ╚╔ HAS THE VALUE 25.
  79.  
  80. ╙UPPOSE THAT THE PROCEDURE ╧╬┼ IS
  81. CALLED WITH
  82.  
  83.   ┼╪┼├ ONE(4,HI)
  84.  
  85. ╬OW WE HAVE
  86.  
  87.   +1------+2--+   +3------+
  88.   !   HI  ! O---->!   25  !<---+
  89.   +-------+---+   +-------+    !
  90.                                !
  91.                                !
  92.   +1------+2--+                !
  93.   !   Y   ! O------------------+
  94.   +-------+---+
  95.  
  96.   +1------+2--+   +3------+
  97.   !   X   ! O---->!   4   !
  98.   +-------+---+   +-------+
  99.  
  100. ╘WO NEW VARIABLES ARE CREATED
  101. TEMPORARELY. ╪ HAS ITS OWN VALUE
  102. PART; THE POINTER PART OF ┘ POINTS AT
  103. THE VALUE PART OF ╚╔.
  104.  
  105. ├HANGING ┘ MEANS CHANGING ╚╔ TOO.
  106. ╘HIS IS WHY THE VALUE OF ╚╔ EQUALS
  107. THE VALUE OF ┘ WHEN WE LEAVE THE
  108. PROCEDURE.
  109.  
  110.  
  111. 4. ├ONSEQUENCES
  112.  
  113.    ╠OOK AT THE PROCEDURE
  114.  
  115.    ╨╥╧├ TWO(╥┼╞ X, ╥┼╞ Y) ├╠╧╙┼─
  116.      X:=1
  117.      ╨╥╔╬╘ Y
  118.    ┼╬─╨╥╧├ TWO
  119.  
  120. ╫E HAVE A VARIABLE ┴ WITH ┴:=9.
  121. ╘HE CALL
  122.  
  123.    ┼╪┼├ TWO(A,A)
  124.  
  125. GIVES THE OUTPUT 1, AND ╬╧╘ 9, AS
  126. PERHAPS EXPECTED. ╫┼ DIDN'T CHANGE
  127. THE VALUE OF ┘, DID WE? ╫E ONLY DID
  128. WITH ╪. ├╧═┴╠ DID!
  129.  
  130. ╫E ILLUSTRATE WITH A DIAGRAM AS
  131. INTRODUCED IN 2.
  132.  
  133.    +1------+2--+   +3------+
  134.    !   A   ! O---->!   9   !<---+
  135.    +-------+---+   +-------+    !
  136.                        !        !
  137.                        !        !
  138.    +1------+2--+       !        !
  139.    !   X   ! O---------+        !
  140.    +-------+---+                !
  141.                                 !
  142.    +1------+2--+                !
  143.    !   Y   ! O------------------+
  144.    +-------+---+
  145.  
  146. ┬OTH ╪ AND ┘ ARE POINTING AT THE SAME
  147. VALUE PART (THAT OF ┴). ┬ECAUSE OF
  148. THIS IT'S NOT SURPISING THAT
  149.  
  150.    X:=1
  151.  
  152. HAS SOME INFLUENCE ON THE VALUE OF ┘.
  153.  
  154. ┘OU WILL SAY THAT IN PROGRAMMING
  155. PRACTICE THERE NEVER WILL BE A
  156. SITUATION IN WHICH TWO ╥┼╞ PARAMETERS
  157. ARE EQUAL. ╘HIS IS LESS TRUE, THAN IS
  158. LOOKS AT FIRST SIGHT. ╫E'LL EXPLAIN
  159. WHY.
  160.  
  161. ┼XAMINE THE PROCEDURE ╙╫┴╨, WHICH
  162. SWAPS THE VALUES OF TWO VARIABLES
  163. WITHOUT A THIRD ONE.
  164.  
  165.    ╨╥╧├ SWAP (╥┼╞ X, ╥┼╞ Y) ├╠╧╙┼─
  166.      X := X + Y
  167.      Y := X - Y
  168.      X := X - Y
  169.    ┼╬─╨╥╧├ SWAP
  170.  
  171. ╫ITH
  172.  
  173.    A:=9; B:=10
  174.    ┼╪┼├ SWAP(A,B)
  175.    ╨╥╔╬╘ A; B
  176.  
  177. WE FIND
  178.  
  179.    10 9
  180.  
  181. AS OUTPUT.
  182.  
  183. ╫ITH 
  184.  
  185.    A:=9
  186.    ┼╪┼├ SWAP(A,A)
  187.    ╨╥╔╬╘ A
  188.  
  189. THE OUTPUT IS 0. ╚OW COME? ─RAW A
  190. DIAGRAM YOURSELF OR DO SOME MINOR
  191. MATHEMATICS
  192.  
  193.    A := A + A
  194.    A := A - A
  195.    A := A - A
  196.  
  197. ╬O ONE WILL EVER PROGRAM A STATEMENT
  198. SUCH AS
  199.  
  200.    ┼╪┼├ SWAP(A,A)
  201.  
  202. BUT IT IS POSSIBLE TO TRANSFER
  203. ELEMENTS OF AN ARRAY INTO THE
  204. PROCEDURE ╙╫┴╨ AND CALL
  205.  
  206.    ┼╪┼├ SWAP(B(I), B(J))
  207.  
  208. ┘OU WILL FIND SOME UNEXPECTED EFFECTS
  209. IF I=J, AND THEN THE CAUSE IS NOT SO
  210. OBVIOUS.
  211.